require('./model/connect');
const express = require('express');
const path = require('path');
const bodyParser = require('body-parser');
const session = require('express-session');
const template = require('art-template');
const dateFormat = require('dateformat');
const morgan = require('morgan');

const app = express();

//如果是true 使用外部模块qs解析,否则使用内置模块 querystring解析
app.use(bodyParser.urlencoded({ extended: false }));
app.use(session({
    secret: 'secret-key',
    resave: false,
    saveUninitialized: false,
    cookie: {
        maxAge: 24 * 60 * 60 * 1000
    }
}));

//配置模板
//模板的位置
app.set('views', path.join(__dirname, 'views'));
//模板的默认后缀
app.set('view engine', 'art');
//解析art后缀使用什么引擎
app.engine('art', require('express-art-template'));
template.defaults.imports.dateFormat = dateFormat;
//配置静态文件路径
app.use(express.static(path.join(__dirname, 'public')));

// 获取系统环境变量 返回值是对象 
if (process.env.NODE_ENV == 'development') {
    // 当前是开发环境
    console.log('当前是开发环境')
        // 在开发环境中 将客户端发送到服务器端的请求信息打印到控制台中
    app.use(morgan('dev'))
} else {
    // 当前是生产环境
    console.log('当前是生产环境')
}
app.use('/admin', require('./middleware/loginGuard'));
app.use('/home', require('./route/home'));
app.use('/admin', require('./route/admin'));

app.use((err, req, res, next) => {
    //这个地方进行统一异常处理
    //{ path: 'xxx', msg: '错误信息' }
    try {
        const result = JSON.parse(err);
        console.log(result);
        let params = [];
        for (let attr in result) {
            if (attr != 'path') {
                params.push(attr + "=" + result[attr]);
            }
        }
        res.redirect(result['path'] + "?" + params.join('&'));
    } catch (ex) {
        console.log(err);
        res.redirect('/admin/error', { msg: err });
    }
})

app.listen(80);

console.log('模仿的博客项目开始启动');